package cn.tedu._03_vehicle.controller;

import cn.tedu._03_vehicle.base.response.JsonResult;
import cn.tedu._03_vehicle.base.utils.CacheUtil;
import cn.tedu._03_vehicle.mapper.NoticeMapper;
import cn.tedu._03_vehicle.pojo.vo.NoticeListVO;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.Serializable;
import java.util.List;
import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/v1/notice/")
@Slf4j
@Api(tags = "通知管理")
public class NoticeController {
    @Autowired
    private RedisTemplate<String , Serializable> redisTemplate;
    @Autowired
    private NoticeMapper noticeMapper;
    //将封装类自动装配过来
    @Autowired
    private CacheUtil cacheUtil;
    @GetMapping("list")
    @ApiOperation("查看通知")
    @ApiOperationSupport(order = 10)
    public JsonResult list(){
        //*
        // 缓存设计-字符串｛“notice——index”：'[{"id":",""title":""}]'
        // 查询Redis中是否存在首页数据
        // 如果有直接返回
        // 如果没有，则1 去sql中去查询
        // 2、设置到Redis中｛set key value｝
        // 返回响应*/
        ValueOperations<String, Serializable> ops = redisTemplate.opsForValue();

//        List<NoticeListVO> list = noticeMapper.noticeList();
//        Serializable serializable = ops.get("notice_list");
//        if (serializable!=null){
//            return JsonResult.ok(list);
//        }
//        ops.set("username",100,30, TimeUnit.SECONDS);
//        return JsonResult.ok(ops);
//    }
//        List<NoticeListVO> list = noticeMapper.noticeList();
//        Serializable serializable = ops.get("notice_list");
//        if (serializable!=null){
//            log.debug("首页数据来自Redis");
//            return JsonResult.ok(serializable);
//        }
//        //如果不存在
//        log.debug("首页数据来自MySQL");
//        ops.set("notice_list", (Serializable) list,30, TimeUnit.SECONDS);
//        return JsonResult.ok(list);
        Serializable serializable = cacheUtil.get("notice_list");
        if (serializable!=null){
            log.debug("数据来源Redis:"+serializable);
            return JsonResult.ok(serializable);
        }
        log.debug("数据来源mysql");
        List<NoticeListVO> list = noticeMapper.noticeList();
        cacheUtil.set("notice_list", (Serializable) list, 30L);
        return JsonResult.ok(list);
    }
}
